import rclpy
from rclpy.node import Node
from partol_voice.srv import SpeechText
import espeakng
class Speaker(Node):
    def __init__(self,node_name):
        super().__init__(node_name)
        self.speech_service_ = self.create_service(SpeechText,'speech_text',self.speech_text_callback)
        self.speaker = espeakng.Speaker()

                # 1. 语音选择（源码默认 "en"，需显式指定中文）
        self.speaker.voice = "zh-CN"  # 优先选择带地区的中文语音
        
        # 2. 语速（wpm：words per minute，源码默认175，中文推荐130-150）
        self.speaker.wpm = 160  # 中文语速比英文慢更自然
        
        # 3. 音调（pitch：0-99，源码默认50，中文推荐55-60更清晰）
        self.speaker.pitch = 58
        
        # 4. 音量（amplitude：0-200，源码默认100，最大200但易失真）
        self.speaker.amplitude = 150  # 比默认高50%，更清晰但不刺耳
        
        # 5. 词间距（wordgap：单位10ms，源码默认0，增加少许间隔更易听懂）
        # self.speaker.wordgap = 5  # 增加50ms词间距（0.05秒）

    def speech_text_callback(self,request,response):
        self.get_logger().info(f'正在准备朗读: {request.text}')
        self.speaker.say(request.text)
        self.speaker.result = True
        return response

def main(args=None):
    rclpy.init(args=args)
    node = Speaker('speaker')
    rclpy.spin(node)
    rclpy.shutdown()

    